Gitを使った分散開発管理16 – p4mergeでマージを行う
Gitでのマージ作業
Gitを使用していて競合が発生した場合、それを解決して正しい状態にする必要があります。 私は以前、競合が発生したファイルに<<<<<<<HEADとかのよくわからない文字列が入って、どうやって修正すればいいか悩んでいました。 こういった競合を解消するためのツールはいくつもありますが、今回はMacで「p4merge」というツールを使用して Gitの競合を解消する方法について紹介します。
環境
今回使用した動作環境は以下のとおりです。
- OS : MacOS X 10.7.5
- Git : 1.8.2
Gitは使える状態にしておいてください。
p4mergeをセットアップ
1.p4mergeをダウンロード まずはここからp4mergeをダウンロードして、p4merge.appを/Applicationsにインストールします。
2.gitconfigの設定 ~/.gitconfigファイルを修正して、マージ用ツールとしてp4mergeのパスを設定します。
[merge] tool = p4merge [mergetool] keepBackup = false [mergetool "p4merge"] path = p4merge keepTemporaries = false trustExitCode = false
3.p4mergeシェルを作成 パスの通っている場所(/usr/local/binとか)にp4mergeシェルを作成します。
#!/bin/sh P4MERGE=/Applications/p4merge.app/Contents/MacOS/p4merge ${P4MERGE} $*
実行権限もつけておきましょう。これで設定は完了です。
% chmod 755 /usr/local/bin/p4merge
p4mergeを使って競合を解消してみる
では、p4mergeを使うために、わざと競合状態をつくります。 まずp4mディレクトリを作成し、そこでGitを初期化します。
% mkdir p4m % cd p4m % git init
次にp4mディレクトリでhello.jsファイルを作成し、コミットしましょう。
function greet(name) { return "Hello," + name; } console.log(greet("juno"));
% git add hello.js % git commit -m "initial commit"
次にブランチを作成し、ファイルを編集してコミットします。
//ブランチを作成 % git checkout -b myBranch
hello.jsは次のように修正しましょう。
function greet(say,name) { return say + "," + name; } console.log(greet("Good Morning","juno"));
ブランチでコミットします。
% git add hello.js % git commit -m "change greet from myBranch"
masterブランチに戻り、さっきとは違う修正をしてコミットします。
% git checkout master
次のようにhello.jsを修正します。
function greet(greeting,name) { console.log("greeting:", greeting); return greeting + "," + name; } console.log(greet("Good Afternoon","juno"));
hello.jsをコミット後にマージしようとしたら競合が発生しました。git mergetoolコマンドを使用してp4mergeを起動します。
% git add hello.js % git commit -m "change greet" % git merge myBranch Auto-merging hello.js CONFLICT (content): Merge conflict in hello.js Automatic merge failed; fix conflicts and then commit the result. % git mergetool Merging: hello.js Normal merge conflict for 'hello.js': {local}: modified file {remote}: modified file Hit return to start merge resolution tool (p4merge):
p4mergeで競合を解決しましょう。 使い方はシンプルで、基本的には競合している箇所を確認し、どの内容を適用するか決めます。 内容に対応した色のボタンがあるので、どの内容を残すかきめましょう。なお、直接内容を入力することもできます。
競合を解消したら、ファイルを保存してp4mergeを終了し、コミットすれば競合を解決してマージ完了です。
% git commit -m "merge from myBranch"
まとめ
今回はp4mergeをつかってGitの競合を解決してみました。 テキストでがんばって修正するよりわかりやすく、簡単に競合の解決ができますね。